#pragma once

/**
 * @file runtime.h
 * @brief 提供 Go 风格的并发启动接口。
 *
 * 这里的 `go::go(...)` 模拟 Go 语言的 `go` 关键字，
 * 实际上是启动一个 std::thread 并返回线程对象（需手动 join）。
 */

#include <thread>
#include <utility>

namespace go {

/**
 * @brief 启动一个新的线程执行给定任务，返回 std::thread。
 * @param fn   可调用对象。
 * @param args 参数列表。
 *
 * 用法示例：
 *     auto worker = go::go([] { ... });
 *     worker.join();
 */
template <typename Fn, typename... Args>
std::thread go(Fn&& fn, Args&&... args) {
    return std::thread(std::forward<Fn>(fn), std::forward<Args>(args)...);
}

} // namespace go